package com.leyou.item.service;

import com.leyou.item.mapper.SpecGroupMapper;
import com.leyou.item.mapper.SpecParamsMapper;
import com.leyou.item.pojo.SpecGroup;
import com.leyou.item.pojo.SpecParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class SpecService {

    @Autowired
    private SpecGroupMapper specGroupMapper;

    @Autowired
    private SpecParamsMapper specParamsMapper;

    /**
     * 根据Cid查询所有分组
     *
     * @param cid
     * @return
     */
    public List<SpecGroup> queryGroupByCid(Long cid) {
        SpecGroup specGroup = new SpecGroup();
        specGroup.setCid(cid);
        // 通用mapper使用select查询，传对象
        return this.specGroupMapper.select(specGroup);
    }


    /**
     * 修改组信息
     *
     * @param specGroup
     */
    public void editGroup(SpecGroup specGroup) {
        // updateByPrimaryKeySelective 根据主键更新属性不为null的值
        this.specGroupMapper.updateByPrimaryKeySelective(specGroup);
    }

    /**
     * 删除组信息
     *
     * @param id
     */
    public void deleteGroup(Long id) {
        this.specGroupMapper.deleteByPrimaryKey(id);
    }

    /**
     * 添加组信息
     *
     * @param specGroup
     */
    public void addGroup(SpecGroup specGroup) {
        this.specGroupMapper.insertSelective(specGroup);
    }

    /**
     * 获取大类组里的属性方法，跟上面第一个获取大类一样
     *
     * @param gid
     * @param generic
     * @param searching
     * @return
     */
    public List<SpecParam> queryParamsByCid(Long gid, Long cid, Boolean generic, Boolean searching) {
        SpecParam specParam = new SpecParam();
        // 根据对象去查数据
        specParam.setGroupId(gid);
        specParam.setCid(cid);
        specParam.setGeneric(generic);
        specParam.setSearching(searching);
        return this.specParamsMapper.select(specParam);
    }


    /**
     * 新增大类里的属性方法，使用post方式请求。注意请求的参数需要转成“查询字符串”！
     *
     * @param specParam
     */
    public void addSpecParams(SpecParam specParam) {
        this.specParamsMapper.insertSelective(specParam);
    }

    /**
     * 大类里属性的修改方法，使用put方式请求,同上，使用一个接口
     *
     * @param specParam
     */
    public void editSpecParams(SpecParam specParam) {
        this.specParamsMapper.updateByPrimaryKeySelective(specParam);
    }

    /**
     * 大类里属性的删除方法，使用DELETE请求
     *
     * @param id
     */
    public void deleteParams(Long id) {
        this.specParamsMapper.deleteByPrimaryKey(id);
    }

    /*
        根据cid去查询所有的分类属性以及下面的参数信息param
     */
    public List<SpecGroup> querySpecsByCid(Long cid) {
        List<SpecGroup> groups = this.queryGroupByCid(cid);
        groups.forEach(group -> {
            group.setParams(this.queryParamsByCid(group.getId(), null, null, null));
        });
        return groups;
    }
}
